//
//  HJUserAccountViewModel.swift
//  HJWeibo
//
//  Created by mac on 16/1/14.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit
import AFNetworking

class HJUserAccountViewModel: NSObject {
    
    var userAccount:HJUserAccount?
    
    override init() {
        //用缓存中的数据 给模型赋值
        userAccount = HJUserAccount.loadUserAccount()
        super.init()
    }
    //用户是否登录的标记
    //只读属性 计算型属性
    var userLogin: Bool {
        return userAccount?.access_token != nil
    }
    
    //从 缓存中获取token
    var token: String? {
        return userAccount?.access_token
    }
    
    //用户姓名
    var userName: String? {
        return userAccount?.name
    }
    
    //用户头像的url
    var headImageURL: NSURL? {
        return NSURL(string: userAccount?.avatar_large ?? "")
    }
    
    
    
    //获取授权的token
    func loadAccessToken(code:String,finished:(isSuccess: Bool) -> ()) {
        
        //url
        let urlString = "https://api.weibo.com/oauth2/access_token"
        
        //参数
        let parameters = ["client_id": client_id,"client_secret":client_secret,"grant_type":"authorization_code","code":code,"redirect_uri":redirect_uri]
        
        let AFN = AFHTTPSessionManager()
        //设置支持解析纯文本的json 格式的数据
        AFN.responseSerializer.acceptableContentTypes?.insert("text/plain")
        AFN.POST(urlString, parameters: parameters, progress: nil, success: { (_, result) -> Void in
            
            print(result)
            //类型转换 将 AnyObject对象 转换为 [Key : Value]
            guard let dict = result as? [String :AnyObject] else {
                print("数据格式不合法")
                //执行失败的回调
                finished(isSuccess: false)
                return
            }
            
            //程序走到这里 代表 AnyObject 一定被转换为 字典格式的数据
            //            let access_token = dict["access_token"] as! String
            //            let uid = dict["uid"] as! String
            let account = HJUserAccount(dict:dict)
            print(account)
            
            
            //获取用户信息
            self.loadUserInfo(account,finished:finished)
            //finished(isSuccess:true)
            
            }) { (_, error) -> Void in
                //执行失败的回调
                finished(isSuccess: false)
                print(error)
        }
        
    }
    
    //MARK: 加载用户信息
    //    private func loadUserInfo(access_token: String,uid: String) {
    private func loadUserInfo(account: HJUserAccount,finished:(isSuccess: Bool) -> ()) {
        
        //print(access_token,uid)
        //1.准备url
        let urlString = "https://api.weibo.com/2/users/show.json"
        //        let parameters = ["access_token":access_token,"uid":uid]
        
        //OC {"nullObject":[NSNull null]}
        //程序员保证这个地方一定有值
        let parameters = ["access_token":account.access_token!,"uid":account.uid!]
        
        
        //2.获取AFN对象
        let AFN = AFHTTPSessionManager()
        
        //3.调用 GET方法
        AFN.GET(urlString, parameters: parameters, progress: nil, success: { (_, result) -> Void in
            print(result)
            //获取用户信息数据
            //类型 转换 将 AnyObject对象 转换为 [Key:Value]
            guard let dict = result as? [String : AnyObject] else {
                print("数据格式不合法")
                finished(isSuccess:false)
                return
            }
            
            let name = dict["name"] as! String
            let avatar_large = dict["avatar_large"] as! String
            
            //我们需要的用户信息就全部获取到
            account.name = name
            account.avatar_large = avatar_large
            print(account)
            //保存信息
            account.saveAccount()
            //执行成功的回调
            finished(isSuccess: true)
            
            
            }) { (_, error) -> Void in
                finished(isSuccess: false)
                print(error)
        }
        
    }
    


}
